/**
 * @param {string} s
 * @return {number[]}
 */

var partitionLabels = function (s) {
    let len = s.length
    let map = new Map()
    let arr = []
    for (let i = 0; i < len; i++) {
        if (!map.has(s[i])) {
            map.set(s[i])
            arr.push([s.indexOf(s[i]), s.lastIndexOf(s[i])])
        }
    }
    // console.log(arr)
    // 规定初始区间
    let first = arr[0][0];
    let last = arr[0][1];
    // 搜集区间
    let ans = new Map()
    // 答案
    let answer = []
    for (let i = 1; i < arr.length; i++) {
        // 如果包含在区间内
        if (arr[i][0] > first && arr[i][1] < last) {
            // 什么都不做
        }
        // 如果下一个的开头在区间内 尾部超出区间 扩大区间
        else if (first < arr[i][0] && arr[i][0] < last
            && arr[i][1] > last) {
            last = arr[i][1]
        }
        // 如果下一个区间的开头大于等于区间尾部 则将之前的区间推入ans
        else if (arr[i][0] >= last) {
            ans.set(first, last)
            answer.push(last - first + 1)
            // 重新规定区间
            first = arr[i][0]
            last = arr[i][1]
        }
        // 如果是最后一个区间，且没有放入ans中，则推入
        if (i == arr.length - 1 && !ans.has(first)) {
            // console.log(first, last)
            ans.set(first, last)
            answer.push(last - first + 1)
        }
    }
    return answer
};
console.log(partitionLabels("ababcbacadefegdehijhklij"))

// console.log(partitionLabels("eaaaabaaec"))